#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>

#define MaxSize 50

typedef struct
{
    int data[MaxSize];
    int top;
}Sq_Stack;

void Init_Stack(Sq_Stack *S)
{
    (*S).top=-1;
}

bool Stack_Empty(Sq_Stack S)
{
    if(S.top==-1) return true;
    else return false;
}

bool Push(Sq_Stack *S,int x)
{
    if((*S).top==MaxSize-1) return false;    //栈满报错
    (*S).data[++((*S).top)]=x;      //指针加1，入栈
    return true;
}

bool pop(Sq_Stack *S,int *x)
{
    if((*S).top==-1) return false;
    *x=(*S).data[((*S).top)--];
    return true;
}

bool Get_Top(Sq_Stack S,int *x)
{
    if(S.top==-1) return false;
    *x=S.data[S.top];
    return true;
}

void Print_Stack(Sq_Stack S)
{
    if (Stack_Empty(S))
    {
        printf("栈为空，无元素可打印\n");
        return;
    }

    for (int i = S.top; i >= 0; i--)
    {
        printf("%d ", S.data[i]);
    }
    printf("\n");
}

int main(){
    Sq_Stack S;
    int x,t;
    Init_Stack(&S);
    Print_Stack(S);
    Push(&S,1);
    Push(&S,2);
    Push(&S,3);
    Print_Stack(S);
    pop(&S,&x);
    Print_Stack(S);
    Get_Top(S,&t);
    printf("%d\n",t);
    return 0;
}

